Something like this to get you going perhaps?
private static void AppendNewFieldToListIfNonExistsent(SPWeb web, SPList list, string internalName,
string displayName, SPFieldType fieldType,
string lookupList = null, string lookupField = null)
{
if (list.Fields.ContainsField(internalName)) return;
if (fieldType == SPFieldType.Lookup)
{
var lookupListId = EnsureLookupEntities(web, lookupList, lookupField);
list.Fields.AddLookup(internalName, lookupListId, false);
}
else
{
list.Fields.Add(internalName, fieldType, false);
}
var field = list.Fields.GetFieldByInternalName(internalName);
field.Title = displayName;
field.Update();
var view = list.DefaultView;
if (view.ViewFields.Exists(field.InternalName)) return;
view.ViewFields.Add(field.InternalName);
view.Update();
}
MSDN SPFIeldCollection.Add(SPField)
MSDN SPFieldCollection.Add(String, SPFieldType, Boolean)
MSDN SPFieldCollection.AddLookup Method (String,Guid,Boolean)
MSDN SPFieldCollection.AddLookup Method (String,Guid,Guid,Boolean)